================================================================================
FUNGSI HELPER MIKHMON - QUICK REFERENCE
================================================================================
File: lib/routeros_api.class.php

FUNGSI RANDOM GENERATOR:
========================

1. randN($length)
   --------------
   Generate random ANGKA saja
   
   Karakter: 23456789
   
   Contoh:
   randN(4)  → 2345
   randN(6)  → 789234
   randN(8)  → 23456789
   
   Penggunaan:
   $password = randN(6);  // Password angka 6 digit

2. randUC($length)
   ---------------
   Generate random HURUF BESAR saja
   
   Karakter: ABCDEFGHJKLMNPRSTUVWXYZ
   (Tidak ada I, O, Q untuk menghindari kebingungan)
   
   Contoh:
   randUC(4)  → ABCD
   randUC(6)  → XYZABC
   randUC(8)  → ABCDXYZW
   
   Penggunaan:
   $username = randUC(8);  // Username huruf besar 8 karakter

3. randLC($length)
   ---------------
   Generate random HURUF KECIL saja
   
   Karakter: abcdefghijkmnprstuvwxyz
   (Tidak ada l, o, q untuk menghindari kebingungan)
   
   Contoh:
   randLC(4)  → abcd
   randLC(6)  → xyzabc
   randLC(8)  → abcdxyzw
   
   Penggunaan:
   $username = randLC(8);  // Username huruf kecil 8 karakter

4. randULC($length)
   ----------------
   Generate random HURUF BESAR + HURUF KECIL
   
   Karakter: ABCDEFGHJKLMNPRSTUVWXYZabcdefghijkmnprstuvwxyz
   
   Contoh:
   randULC(4)  → aBcD
   randULC(6)  → XyZaBc
   randULC(8)  → AbCdXyZw
   
   Penggunaan:
   $username = randULC(8);  // Username mixed case 8 karakter

5. randNLC($length)
   ----------------
   Generate random ANGKA + HURUF KECIL
   
   Karakter: 23456789abcdefghijkmnprstuvwxyz
   
   Contoh:
   randNLC(4)  → 2a3b
   randNLC(6)  → 5x7y9z
   randNLC(8)  → 2a3b5c7d
   
   Penggunaan:
   $username = randNLC(8);  // Username angka + huruf kecil

6. randNUC($length)
   ----------------
   Generate random ANGKA + HURUF BESAR
   
   Karakter: 23456789ABCDEFGHJKLMNPRSTUVWXYZ
   
   Contoh:
   randNUC(4)  → 2A3B
   randNUC(6)  → 5X7Y9Z
   randNUC(8)  → 2A3B5C7D
   
   Penggunaan:
   $username = randNUC(8);  // Username angka + huruf besar

7. randNULC($length) ⭐ PALING SERING DIGUNAKAN
   -----------------
   Generate random ANGKA + HURUF BESAR + HURUF KECIL
   
   Karakter: 23456789ABCDEFGHJKLMNPRSTUVWXYZabcdefghijkmnprstuvwxyz
   
   Contoh:
   randNULC(4)  → 2aB3
   randNULC(6)  → 5xY7zC
   randNULC(8)  → 2aB3cD5e
   
   Penggunaan:
   $username = 'AG' . randNULC(8);  // Username: AG2aB3cD5e
   $password = randNULC(6);         // Password: 5xY7zC
   
   ⭐ INI YANG DIGUNAKAN DI AGENT PANEL!

================================================================================

CONTOH PENGGUNAAN DI MIKHMON:
=============================

1. GENERATE USER-PASS (Username dan Password berbeda)
   --------------------------------------------------
   $username = 'AG' . randNULC(8);  // AG2aB3cD5e
   $password = randNULC(6);         // 5xY7zC

2. GENERATE VOUCHER (Username = Password)
   --------------------------------------
   $voucher = randNULC(8);          // 2aB3cD5e
   $username = $voucher;
   $password = $voucher;

3. GENERATE DENGAN PREFIX
   -----------------------
   $prefix = 'WIFI';
   $username = $prefix . randNULC(6);  // WIFI2aB3cD

4. GENERATE DENGAN SUFFIX
   -----------------------
   $suffix = date('dmy');
   $username = randNULC(6) . $suffix;  // 2aB3cD281025

5. GENERATE DENGAN PREFIX DAN SUFFIX
   ----------------------------------
   $prefix = 'AG';
   $suffix = date('dmy');
   $username = $prefix . randNULC(6) . $suffix;  // AG2aB3cD281025

================================================================================

CONTOH DI AGENT PANEL:
=====================

File: mikhmon/agent/generate.php

for ($i = 1; $i <= $quantity; $i++) {
    // Generate username & password
    $username = 'AG' . randNULC(8);
    $password = randNULC(6);
    $comment = 'Agent-' . $agentData['agent_code'] . '-' . date('d.m.y');
    
    // Add user to MikroTik
    $API->comm("/ip/hotspot/user/add", array(
        "server" => "all",
        "name" => $username,
        "password" => $password,
        "profile" => $profileName,
        "comment" => $comment,
    ));
}

HASIL:
------
Username: AG2aB3cD5e
Password: 5xY7zC
Comment: Agent-AG001-28.10.25

================================================================================

CONTOH DI MIKHMON ADMIN:
========================

File: mikhmon/hotspot/generateuser.php

// User-Pass mode
if ($user == "up") {
    for ($i = 1; $i <= $qty; $i++) {
        if ($char == "mix2") {
            $u[$i] = randNULC($userl);
        }
        $p[$i] = randN($userl);
        $u[$i] = "$prefix$u[$i]";
    }
}

// Voucher mode (username = password)
if ($user == "vc") {
    for ($i = 1; $i <= $qty; $i++) {
        if ($char == "mix2") {
            $p[$i] = randNULC($userl);
            $u[$i] = "$prefix$p[$i]";
        }
    }
}

================================================================================

TIPS PENGGUNAAN:
===============

1. ✅ GUNAKAN randNULC() untuk keamanan maksimal
   → Kombinasi angka + huruf besar + huruf kecil
   → Lebih sulit ditebak

2. ✅ PANJANG MINIMAL:
   → Username: 6-8 karakter
   → Password: 4-6 karakter

3. ✅ TAMBAHKAN PREFIX untuk identifikasi
   → 'AG' untuk agent
   → 'ADM' untuk admin
   → 'TEST' untuk testing

4. ✅ TAMBAHKAN SUFFIX untuk tracking
   → Date: date('dmy') → 281025
   → Time: date('His') → 143025
   → Random: rand(100, 999) → 456

5. ❌ HINDARI karakter yang membingungkan:
   → I (huruf i besar) vs l (huruf L kecil) vs 1 (angka satu)
   → O (huruf o besar) vs 0 (angka nol)
   → Q (huruf q) vs 9 (angka sembilan)
   
   Fungsi MikhMon sudah menghindari karakter ini!

================================================================================

PERBANDINGAN KEAMANAN:
=====================

LEMAH:
------
randN(6)     → 234567        (hanya angka, mudah ditebak)
randLC(6)    → abcdef        (hanya huruf kecil)
randUC(6)    → ABCDEF        (hanya huruf besar)

SEDANG:
-------
randNLC(6)   → 2a3b5c        (angka + huruf kecil)
randNUC(6)   → 2A3B5C        (angka + huruf besar)
randULC(6)   → aBcDeF        (huruf besar + kecil)

KUAT: ⭐
------
randNULC(6)  → 2aB3cD        (angka + huruf besar + huruf kecil)
randNULC(8)  → 2aB3cD5e      (lebih panjang = lebih aman)

SANGAT KUAT: ⭐⭐⭐
--------------
'AG' . randNULC(8) . date('dmy')  → AG2aB3cD5e281025
(prefix + random + suffix = sangat unik)

================================================================================

TESTING FUNGSI:
==============

Buat file test: mikhmon/test_random.php

<?php
include('lib/routeros_api.class.php');

echo "randN(6): " . randN(6) . "\n";
echo "randUC(6): " . randUC(6) . "\n";
echo "randLC(6): " . randLC(6) . "\n";
echo "randULC(6): " . randULC(6) . "\n";
echo "randNLC(6): " . randNLC(6) . "\n";
echo "randNUC(6): " . randNUC(6) . "\n";
echo "randNULC(6): " . randNULC(6) . "\n";

echo "\nContoh Username:\n";
echo "AG" . randNULC(8) . "\n";
echo "AG" . randNULC(8) . "\n";
echo "AG" . randNULC(8) . "\n";

echo "\nContoh Password:\n";
echo randNULC(6) . "\n";
echo randNULC(6) . "\n";
echo randNULC(6) . "\n";
?>

Jalankan: php test_random.php

Output:
-------
randN(6): 234567
randUC(6): ABCDEF
randLC(6): abcdef
randULC(6): aBcDeF
randNLC(6): 2a3b5c
randNUC(6): 2A3B5C
randNULC(6): 2aB3cD

Contoh Username:
AG2aB3cD5e
AG7xY9zAb
AG4mN6pQr

Contoh Password:
5xY7zC
3aB5cD
8mN2pQ

================================================================================

TROUBLESHOOTING:
===============

ERROR: Call to undefined function randNULC()
--------------------------------------------
SOLUSI:
1. Pastikan file lib/routeros_api.class.php di-include
2. Cek include path benar: include('../lib/routeros_api.class.php');
3. Cek file ada: ls -la lib/routeros_api.class.php

ERROR: Username terlalu pendek
------------------------------
SOLUSI:
1. Minimal 4 karakter untuk username
2. Minimal 3 karakter untuk password
3. Gunakan: randNULC(6) atau lebih

ERROR: Username sudah ada di MikroTik
-------------------------------------
SOLUSI:
1. Fungsi random sudah cukup unik
2. Kemungkinan duplikat sangat kecil
3. Jika terjadi, generate ulang dengan try-catch

================================================================================

KESIMPULAN:
==========

✅ GUNAKAN randNULC() untuk generate username dan password
✅ PANJANG minimal 6 karakter untuk keamanan
✅ TAMBAHKAN prefix untuk identifikasi
✅ FUNGSI ini sudah TERBUKTI BERHASIL di MikhMon
✅ TIDAK perlu membuat fungsi random sendiri

"Don't reinvent the wheel. Use what works!"

================================================================================
